package com.ruoyi.system.service;


import com.github.pagehelper.PageInfo;
import com.ruoyi.system.domain.Student;
import com.ruoyi.system.domain.SysAnnounManagement;
import com.ruoyi.system.domain.SyseEventsPosted;
import com.ruoyi.system.domain.mongodb.Unrels;
import com.ruoyi.system.domain.mongodb.Users;
import com.ruoyi.system.domain.mongodb.Works;

import java.util.List;
import java.util.Map;

public interface IStudentService {

    /**
     * 根据id修改手机号信息(手机认证)
     * @param student
     * @return
     */
    public void updateStudnetPhoneNumById(Student student);

    /**
     * 根据大赛id查询参与该大赛的所有学生信息
     */
    public List<Student> queryStudentsByEpid(Integer epid);

    /**
     *根据学校名称进行查询
     * */
    public PageInfo<Users> selectBySchool(String schoolsName, Integer pageNum, Integer pageSize);

    /**
     * 确认报名  根据学生的id进行查询
     * */
    Integer selectbyUserId(String users,String epId,String teacherId);

    /**
     * 报名管理查询
     * eptitle：赛事标题
     * epsponsor 主办方
     * epstate 赛事状态
     * eplevel 赛事级别
     */
    List<SyseEventsPosted> selectEventsPostedAndAggregation(String eptitle, String epsponsor, String epstate, String eplevel,Integer pageNum,Integer pageSize);
    /**
     * 报名学生列表查询
     * eptitle：赛事标题
     * realname 学生姓名
     * epstate 赛事状态
     * eplevel 赛事级别
     */
    List<Student> selectEventsPostedForStudents(Student student,Integer pageNum,Integer pageSize);


    /**
     * 根据赛事下面的学生
     * epid 赛事的id
     * epstate赛事的状态
     * */
    List<Student> selectByEpIdAndEpstate(String epid,Integer pageNum,Integer pageSize);

    /**
     * 报名审批
     * @param sid 学生ID
     * @param epId  赛事ID
     * @param status   审批状态
     * @return
     */
    Integer baoMingShenPi(String sid, String epId, int status);
    /**
     * 批量报名审批
     * @param students 学生列表
     * @return
     */
    Integer piliangShenPi(List<Student> students);
    /**
     * 删除已经报名赛事得学生
     * */
    Integer deleteStudentBySid(String sid,String epId);

    /**
     * 根据 学校名称查询学校下面得老师
     * */
    List<Users> selectUsersByRole(String schoolName);

    /**
     * 根据学生ID查询所报的赛事列表
     * @param userId  学生ID
     * @return
     */
    List<Map<String, Object>> selectEventsByUserID(String userId);

    /**
     * 根据老师ID查询所报名的赛事
     * @param teacherId
     * @return
     */
    List<Map<String, Object>> selectEventsByTeacherID(String teacherId);

    /**
     * 根据老师所在得学校 查询这个学校下得所有学生
     * */
    PageInfo<Users> selectByTeacherSchool(String teacherId,Integer pageNum,Integer pageSize);

    /**
     * 老师端得学生批量报名
     * */
    Integer teacherSaveStudent(String teacherId,String epid, String studentArr, String groupId);
    /**
     * 老师端得学生批量报名根据班级ID
     * */
    Integer applyStudentsByKlassId(String teacherId,String epid, String klassId, String groupId);


    /**
     * 根据User的id获取用户信息
     * */
    public Users selectByUserId(String UserId);


    /**
     *  老师端：查询老师报名的学生
     * eptitle：赛事标题
     * epsponsor 主办方
     * epstate 赛事状态
     * eplevel 赛事级别
     * teacherId:教师id
     */
    List<Student> selectEventsAndAggreTeacher(Student student,Integer pageNum,Integer pageSize);

    /**
     * 根据学生的id 查询该学生没有发布的作品
     * */
    List<Works> selectWorksByUserId(String userId);

    /**
     * 删除未发布的作品Unrels   添加未发布的作品works   然后向mysql中的work表记录一下
     * userId:用户的id
     * epId：报名的赛事id
     * wordId：作品id
     * groupId 分组ID
     * */
    Integer submitWorkForEvent(String userId, Integer epId, String wordId, Integer groupId) throws Exception;


    /**
     * 根据userId  查询到用户所在学校的指导老师
     * */
    List<Users> selectUserById(String userId);

    /**
     * 学生端的赛事报名
     * @param student 学生报名对象
     * */
    Integer saveStudent(Student student);

    /**
     * 校园赛事公告
     * 根据学生的id  查询学生所在学校的校园级 manage
     * */
    List<SysAnnounManagement> selectManageByEpschoolAndEplevel(String userId, Integer pageNum, Integer pageSize);

    /**
     * 校园赛事咨询
     * 根据学生的id  查询学生所在学校的校园级 的比赛
     * */
    List<SyseEventsPosted> selectEpByEpschoolAndEplevel(String userId,Integer pageNum,Integer pageSize);

    /**
     * 根据用户的id查询当前人的信息
     * */
    Users selectByUsersId(String userId);

    /**
     * 删除报名赛事的作品
     * */
    Integer deleteUserIdAndWord(String userId, Integer epId);

    boolean upgradeNextStage(String epid, String studentIds, String eventStage);
}
